def c = Account.createCriteria()
def results = c.list {
like("holderFirstName", "Fred%")
and {
between("balance", 500, 1000)
eq("branch", "London")
}
maxResults(10)
order("holderLastName", "desc")
}def c = Account.createCriteria()
def results = c.list (max: 10, offset: 10) {
like("holderFirstName", "Fred%")
and {
between("balance", 500, 1000)
eq("branch", "London")
}
order("holderLastName", "desc")
}println "Rendering ${results.size()} Accounts of ${results.totalCount}"| Method | Description |
|---|---|
| list | This is the default method. It returns all matching rows. |
| get | Returns a unique result set, i.e. just one row. The criteria has to be formed that way, that it only queries one row. This method is not to be confused with a limit to just the first row. |
| scroll | Returns a scrollable result set |
| listDistinct | If subqueries or associations are used, one may end up with the same row multiple times in the result set. In Hibernate one would do a "CriteriaSpecification.DISTINCT_ROOT_ENTITY". In grails one can do it even simpler by just using this method. |
TheIf you invoke the builder with no method name like solistDistinct()method does not work well with the pagination optionsmaxResultandfirstResult. If you need distinct results with pagination, we currently recommend that you use HQL. You can find out more information from this blog post.
c { … }list() method will be invoked automatically. In other words, it's the equivalent ofc.list { … }| Node | Description | Example |
|---|---|---|
| between | Where the property value is between to distinct values | between("balance", 500, 1000) |
| eq | Where a property equals a particular value. | eq("branch", "London") |
| eq (case-insensitive) | A version of eq that supports an optional 3rd Map parameter to specify that the query be case-insensitive. | eq("branch", "london", [ignoreCase: true]) |
| eqProperty | Where one property must equal another | eqProperty("lastTransaction","firstTransaction") |
| gt | Where a property is greater than a particular value | gt("balance",1000) |
| gtProperty | Where a one property must be greater than another | gtProperty("balance","overdraft") |
| ge | Where a property is greater than or equal to a particular value | ge("balance",1000) |
| geProperty | Where a one property must be greater than or equal to another | geProperty("balance","overdraft") |
| idEq | Where an objects id equals the specified value | idEq(1) |
| ilike | A case-insensitive 'like' expression | ilike("holderFirstName","Steph%") |
| in | Where a property is contained within the specified list of values. Can also be chained with the not method where a property is not contained within the specified list of values. Note: 'in' is a groovy reserve word, so it must be escaped by quotes. | 'in'("holderAge",[18..65]) or not{'in'("holderAge",[18..65])} |
| isEmpty | Where a collection property is empty | isEmpty("transactions") |
| isNotEmpty | Where a collection property is not empty | isNotEmpty("transactions") |
| isNull | Where a property is null | isNull("holderGender") |
| isNotNull | Where a property is not null | isNotNull("holderGender") |
| lt | Where a property is less than a particular value | lt("balance",1000) |
| ltProperty | Where a one property must be less than another | ltProperty("balance","overdraft") |
| le | Where a property is less than or equal to a particular value | le("balance",1000) |
| leProperty | Where a one property must be less than or equal to another | leProperty("balance","overdraft") |
| like | Equivalent to SQL like expression | like("holderFirstName","Steph%") |
| ne | Where a property does not equals a particular value | ne("branch", "London") |
| neProperty | Where one property does not equal another | neProperty("lastTransaction","firstTransaction") |
| order | Order the results by a particular property | order("holderLastName", "desc") |
| rlike | Similar to like, but uses a regex. Only supported on Oracle and MySQL. | rlike("holderFirstName",/Steph.+/) |
| sizeEq | Where a collection property's size equals a particular value | sizeEq("transactions", 10) |
| sizeGt | Where a collection property's size is greater than a particular value | sizeGt("transactions", 10) |
| sizeGe | Where a collection property's size is greater than or equal to a particular value | sizeGe("transactions", 10) |
| sizeLt | Where a collection property's size is less than a particular value | sizeLt("transactions", 10) |
| sizeLe | Where a collection property's size is less than or equal to a particular value | sizeLe("transactions", 10) |
| sizeNe | Where a collection property's size is not equal to a particular value | sizeNe("transactions", 10) |
| sqlRestriction | Use arbitrary SQL to modify the resultset | sqlRestriction "char_length( first_name ) = 4" |
| Name | Description | Example |
|---|---|---|
| order(string, string) | Specifies both the sort column (the first argument) and the sort order (either 'asc' or 'desc'). | order "age", "desc" |
| firstResult(int) | Specifies the offset for the results. A value of 0 will return all records up to the maximum specified. | firstResult 20 |
| maxResults(int) | Specifies the maximum number of records to return. | maxResults 10 |
| cache(boolean) | Tells Hibernate whether to cache the query or not (if the query cache is enabled). | cache true |
branch names there are for each Account:def c = Account.createCriteria()
def branchCount = c.get {
projections {
countDistinct "branch"
}
}| Name | Description | Example |
|---|---|---|
| property | Returns the given property in the returned results | property("firstName") |
| distinct | Returns results using a single or collection of distinct property names | distinct("lastName") or distinct(['firstName', 'lastName']) |
| avg | Returns the average value of the given property | avg("age") |
| count | Returns the count of the given property name | count("branch") |
| countDistinct | Returns the distinct count of the given property name | countDistinct("branch") |
| groupProperty | Groups the results by the given property | groupProperty("lastName") |
| max | Returns the maximum value of the given property | max("age") |
| min | Returns the minimum value of the given property | min("age") |
| sum | Returns the sum of the given property | sum("balance") |
| rowCount | Returns count of the number of rows returned | rowCount() |